/*
 * app_filetransport_api.h
 *
 *  Created on: 2023年8月24日
 *      Author: HXF
 */

#ifndef DS_APP_INS_APP_FILETRANSPORT_API_H_
#define DS_APP_INS_APP_FILETRANSPORT_API_H_

#include "app_filetransport_api_subsidiary.h"
#include "app_file_event_link.h"
#include "app_file_packet_api.h"

void file_api_test(void);

void DS_file_api_init(void);
void DS_file_api_task(void);

FILE_TRANSPORT_E get_file_transport_step(void);

#ifdef HUB_DEVICE
/**
 * @brief production_deal_transport_request_keyvalue
 * HUB设备在上行通道里收到request物模型之后，调用该函数，解析文件传输请求
 * @param rfmid,
 * keyvalue，request物模型，key+value
 * len，keyvalue的长度
 * @return 0 成功；其他 失败
 */
int production_deal_transport_request_keyvalue(unsigned char rfmid,
                                               const unsigned char *keyvalue, int len);


int production_deal_check_result_keyvalue(unsigned char rfmid,
                                               const unsigned char *keyvalue, int len);
/**
 * @brief production_deal_transport_confirm_keyvalue
 * HUB设备在上行通道里收到confirm物模型之后，调用该函数，解析文件传输确认
 * @param rfmid,
 * keyvalue，confirm物模型，key+value
 * len，keyvalue的长度
 * @return 0 成功；其他 失败
 */
int production_deal_transport_confirm_keyvalue(unsigned char rfmid,
                                               const unsigned char *keyvalue, int len);
#endif
#ifdef RFM_DEVICE
/**
 * @brief consumption_deal_sync_broadcast_updateme_keyvalue
 * RFM设备在同步广播里收到updateme物模型之后，调用该函数，解析固件广播升级
 * @param keyvalue，updateme物模型，key+value
 * len，keyvalue的长度
 * @return 0 成功；其他 失败
 */
int consumption_deal_sync_broadcast_updateme_keyvalue(const unsigned char *keyvalue,
                                                      int len);

/**
 * @brief consumption_deal_consult_keyvalue
 * RFM设备收到consult文件传输接受物模型之后,调用该函数，完成第一次握手
 * @param keyvalue，consult文件传输接受物模型，key+value
 * len，consult文件传输接受物模型的长度
 * @return 0 成功；其他 失败
 */
int consumption_deal_consult_keyvalue(const unsigned char *keyvalue, int len);

/**
 * @brief consumption_deal_file_updateme_keyvalue
 * RFM设备在文件传输通道里收到updateme物模型之后，调用该函数，解析文件校验请求
 * @param keyvalue，updateme物模型，key+value
 * len，keyvalue的长度
 * @return 0 成功；其他 失败
 */
int consumption_deal_file_updateme_keyvalue(const unsigned char *keyvalue,
                                                      int len);

/**
 * @brief consumption_deal_file_payload
 * RFM设备在文件传输通道里收到cmd0x4A文件分块传输报文后，调用该函数，解析文件
 * @param payload，
 * len，payload的长度
 * @return 0 成功；其他 失败
 */
int consumption_deal_file_payload(const unsigned char *payload, int len);
#endif
#endif /* DS_APP_INS_APP_FILETRANSPORT_API_H_ */
